iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 20
0
自我挑戰組

前端菜焦阿日記系列 第 20

|D20| JS - 你所不知道的JS:型別與文法篇5 value

  • 分享至 

  • xImage
  •  
tags: 2019年鐵人賽JSYouDon'tKnowJS

重點

  • 類陣列不像陣列可以繼承陣列所有方法使用,通常會用變成array操作
  • js裡的string不是以Character字元存在array裡
  • value-copy vs by reference-copy

類陣列(Array-Likes)

  • 會出現array-like的情況

    1. Various DOM query operations return lists of DOM elements that are not true array.
      各種DOM查詢操作返回的lists不是真的array,而是array-likes。
    1. when functions expose the arguments (array-like) object (as of ES6, deprecated) to access the arguments as a list.
      例如接API時要回傳我們function()使用了什麼參數,會傳去一個類陣列包住使用參數(書本叫引數,arguments)
  • var一個新陣列時,會繼承陣列的prototype(原型),所以有一些method(方法)可用,如indexOf()

    圖片來源MDN,有prototype的都可繼承使用

  • 類陣列不像陣列可以繼承陣列所有方法使用,通常會用.slice() 變成array

var toArray = Array.prototype.slice.call(arrayLikes)

[補充] querySelectorAll vs. getElementById

  • all像是包裝用法('#id')或('.class')就可以
  • ById只能找id,ByClass只能找class

字串(String)

  • js裡的string不可改變(immutable,術語不要翻中)
  • js裡的string不是char存在array裡
  • .split()切割字串成array
var a = "hello"
var b = a.split("") //["h","e","l","l","o"]
var c = ["h","e","l","l","o"]

//1. 找單一字母
a[1] //e, 這語法不建議用,舊版IE不支援
a.chartAt(1) //e, 正確做法


//2. 若string是char存在array裡,那a[1]應該要改變原值,結果不行
a[1] = "f" 
b[1] = "f"

a //"hello"
b //["h","f","l","l","o"]

數字(Number)

  • Number.isInteger()測試值是否為整數
  • 最大浮點數值 > 最大安全整數值(64bit) > 最大整數值(32bit)
    Number.MAX_VALUE > Number.MAX_SAFE_INTEGER > Math.pow(2,31)-1
    1.798e+308 > 2^52 - 1 > 2^31 - 1

Special Number

  • NaN 是無效的數字(invalid number),可想成進行數學運算失敗,改assign失敗的number結果
  • Number.isNaN()
  • NaN !== NaN
var a = 3 * "hi" //NaN
Number.isNaN(a) //true
NaN !== NaN //true

Special Values

  • nullundefined常被當做"empty" values 或 "non" values使用
  • null表示曾經有值,但不再有
  • null不是識別字(identifier),不能賦值
  • undefined是一個識別字,非strict模式下可以賦值,但不建議用
//爛透了的做法
function foo(){
    undefined = 2
}

上一篇
|D19| JS - Document Object Model (DOM) 操作
下一篇
|D21| JS - 你所不知道的 JS:型別與文法篇 隱含的強制轉型(implicit coercion)
系列文
前端菜焦阿日記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言